home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / m68k / tutor.arc / OF.SA < prev    next >
Text File  |  1990-01-05  |  8KB  |  259 lines

  1. OF       IDNT      1,0       OF & PERIOD Command                     12/18/81
  2.  
  3.          XDEF      OFCMD
  4.          XDEF      PERCMD
  5.          XDEF      PNTCLS
  6.          XDEF      PNTREG
  7.  SPC 1
  8.          XREF      FIXBUF
  9.          XREF      FIRST
  10.          XREF      FNEXTF
  11.          XREF      GETA
  12.          XREF      GETHEX
  13.          XREF      MACSBUG
  14.          XREF      MSG
  15.          XREF.S    OFFSET
  16.          XREF      OUT1CR
  17.          XREF      OUTPUT
  18.          XREF      PNT4HX
  19.          XREF      PNT8HX
  20.          XREF      PORTIN1
  21.          XREF      PUTHEX
  22.          XREF.S    REGA7
  23.          XREF.S    REGPC
  24.          XREF.S    REGS
  25.          XREF.S    REGSR
  26.          XREF.S    REGUS
  27.          XREF      SYNTAX
  28.          XREF      WHAT
  29.  PAGE
  30.          SECTION   11
  31.  SPC 2
  32. * .*  HANDLER
  33. *   GET TWO CHARACTERS FOLLOWING PERIOD
  34. *
  35.  SPC 1
  36. PERCMD   LSL.W     #8,D1
  37.          MOVE.B    (A5),D1  D1 = 2ND,3RD CHARACTERS
  38.          SUB.L     #1,A5    A5 = POINTER TO 2ND CHAR  (1ST REAL CHARACTER)
  39.  SPC 1
  40.          LEA       REGTBL(PC),A0
  41. PER4     CLR.L     D7
  42.          MOVE.W    (A0)+,D7  SAVE FIRST WORD FOR END OF TABLE TEST
  43.          MOVE.W    (A0)+,D0  GET REAL REGISTER ID INTO D0
  44.          CMP.W     #$FFFF,D7 ARE WE AT THE END OF THE TABLE?
  45.          BEQ       WHAT       YES...THEN WE DIDNT FIND IT
  46.  SPC 1
  47.          CMP.B     #'@',D0
  48.          BNE.S     PER3      NOT @
  49.  SPC 1
  50. * THIRD CHAR MUST BE NUMERIC 0 - 7
  51.          MOVE.B    D1,D0     ALLEGED DIGIT
  52.          CMP.B     #'0',D0
  53.          BMI       PER4      NOT A DIGIT
  54.          CMP.B     #'8',D0
  55.          BPL       PER4      NOT A DIGIT
  56.  SPC 1
  57. PER3     CMP.W     D1,D0
  58.          BNE       PER4      MISS-MATCH
  59.  PAGE
  60. *******************************************************************
  61. *        AT THIS TIME WE HAVE FOUND THE ENTRY IN THE "REG TABLE"  *
  62. *        WE NOW NEED TO EXTRACT AND USE THE OFFSET                *
  63. *******************************************************************
  64.  SPC 1
  65.          LEA       FIRST(PC),A0  A0 = Start of VERSAbug RO
  66.          ADD.L     D7,A0     Add offset
  67.          JMP       (A0)      Now go to the calculated location
  68.  SPC 2
  69. ***************
  70. REGTBL   EQU  *
  71. ***************
  72.  SPC 1
  73.          DC.W SETA7-FIRST    Stack Register Routine
  74.          DC.W 'A7'           *
  75.  SPC 1
  76.          DC.W SETPC-FIRST    Program Counter Routine
  77.          DC.W 'PC'           *
  78.  SPC 1
  79.          DC.W SETSR-FIRST    Status Register Routine
  80.          DC.W 'SR'           *
  81.  SPC 1
  82.          DC.W SETUS-FIRST    User Stack Routine
  83.          DC.W 'US'           *
  84.  SPC 1
  85.          DC.W SETSS-FIRST    System Stack Routine
  86.          DC.W 'SS'           *
  87.  SPC 1
  88.          DC.W SETD-FIRST     Data Register Routine
  89.          DC.W 'D@'           *
  90.  SPC 1
  91.          DC.W SETA-FIRST     Address Register Routine
  92.          DC.W 'A@'           *
  93.  SPC 1
  94.          DC.W PNTCLSA-FIRST  All Address Registers Routine
  95.          DC.W 'A '           *
  96.  SPC 1
  97.          DC.W PNTCLSD-FIRST  All Data Registers Routine
  98.          DC.W 'D '           *
  99.  SPC 1
  100.          DC.W SETRN-FIRST    All Registers Routine
  101.          DC.W 'R@'           *
  102.  SPC 1
  103.          DC.W $FFFF          END OF TABLE
  104.   PAGE
  105. *    PRINT & INPUT REGISTER ROUTINES
  106. *
  107. SETD     LEA       REGS,A4  START OF REGISTERS
  108.          BRA.S SETR
  109.  SPC 1
  110. SETA     LEA       REGS+32,A4  OFFSET IN REGISTER TABLE
  111.          BRA.S SETR
  112.  SPC 1
  113. SETPC    LEA       REGPC,A4  WHERE PC IS
  114.          BRA.S SETR0
  115.  SPC 1
  116. SETSR    LEA       REGSR,A4  WHERE SR IS
  117.          BRA.S SETR0
  118.  SPC 1
  119. SETA7    MOVE.L REGSR,D1  GET CONDITION CODES
  120.          AND.W #$2000,D1   CHECK SUPERVISOR BIT
  121.          BEQ.S SETUS
  122. SETSS    LEA       REGA7,A4  WHERE SUPERVISOR STACK IS
  123.          BRA.S SETR0
  124.  SPC 1
  125. SETUS    LEA       REGUS,A4  USER STACK
  126.          BRA.S SETR0
  127.  SPC 1
  128. SETRN    LEA    OFFSET,A4  SET OFFSET
  129.          CMP.B     #'7',D1
  130.          BEQ       SYNTAX    NOT ALLOWED TO CHANGE A7
  131.  SPC 1
  132. *
  133. *  ROUTINE TO ENTER DATA FOR A SINGLE REGISTER
  134. *   A5-A6 ARE COMMAND BUFFER
  135. *   D0 HAS REGISTER DIGIT A4 HAS CLASS OFFSET
  136. SETR     BSR GETHEX  GET REG NUMBER
  137.          LSL.L #2,D0   SHIFT LEFT...MULT BY 4
  138.          ADD.L D0,A4  A4 NOW HAS EXACT ADDRESS
  139. SETR0    ADD.L #2,A5  NOW FIND PARAMETERS
  140.          MOVE.B #':',D0 SEE IF COLON IN COMMAND
  141.          BSR.S SCAN
  142.          BEQ.S SETR5
  143. *SEE IF ANY PARAMER (HEX)
  144.          LEA       SETR4(PC),A0  WHERE TO GO IF NO PARAMETERS
  145.          BSR       FNEXTF    FIND NEXT FIELD
  146.  SPC 1
  147.          CMP.B     #'.',D0
  148.          BEQ.S     SEMACS    PERIOD; GET OUT
  149.  SPC 1
  150.          BSR       GETA      GET ADDRESS VALUE
  151.          MOVE.L    D0,(A4)   SAVE NEW VALUE
  152. SEMACS   BRA       MACSBUG
  153.  SPC 1
  154. *JUST PRINT IT
  155. SETR4    BSR.S PRINTR  FIX UP TO PRINT
  156.          BRA MSG  GO PRINT MESSAGE-GO TO MACSBUG
  157.  SPC 1
  158. SETR5    BSR.S SETSR1
  159.          BRA       SEMACS
  160.  SPC 1
  161. SETSR1   BSR.S PRINTR  FIX UP TO PRINT
  162.          MOVE.B #' ',(A6)+  SPACE
  163.          MOVE.B #'?',(A6)+ PROMPT
  164.          MOVE.B #' ',(A6)+  SPACE
  165.          BSR OUTPUT  PRINT IT
  166.  SPC 1
  167.          BSR       FIXBUF
  168.          BSR       PORTIN1
  169.  SPC 1
  170.          LEA       SETSR15(PC),A0    A0=DEFAULT (NO PARM) ADDRESS
  171.          BSR   FNEXTF        FIND FIELD
  172.  SPC 1
  173.          CMP.B     #'.',D0
  174.          BEQ       SEMACS    PERIOD; GET OUT
  175.  SPC 1
  176.          BSR   GETA          CONVERT IT
  177.          MOVE.L D0,(A4)      STORE NEW DATA
  178.  SPC 1
  179. SETSR15  DS 0
  180.          RTS
  181.  SPC 2
  182. * SEE IF CHARACTER IS IN BUFFER
  183. SCAN     MOVE.L A5,A0  A0 IS WORKING SCANNER
  184. SCAN2    CMP.L A6,A0  SEE IF AT END OF BUFFER
  185.          BHI.S RETURN5
  186.          CMP.B (A0),D0  LOOK AT CHARACTER
  187.          BEQ.S RETURN5
  188.          ADD.L #1,A0  GET PAST CHARACTER
  189.          BRA.S SCAN2
  190. RETURN5  RTS
  191.          PAGE
  192. * ROUTINE TO SET UP TO PRINT REG
  193. PRINTR   BSR FIXBUF
  194.  SPC 1
  195.          ADD.L #3,A6  GET PAST REG NAME (.XX)
  196.          MOVE.B #'=',(A6)+  PUT IN EQUAL SIGN
  197.          MOVE.L (A4),D0  GET VALUE
  198.          CMP.L #REGSR,A4   SEE IF THIS IS CONDITION CODES
  199.          BNE.S PRINTR2
  200.          BSR PNT4HX  JUST PRINT WORD
  201.          RTS
  202.  SPC 1
  203. PRINTR2  BSR PNT8HX  PRINT THE VALUE
  204.          RTS
  205.          PAGE
  206. *
  207. *   PRINT ALL REGISTERS IN A CLASS (A OR D OR R)
  208. *
  209.  SPC 2
  210. OFCMD    DS        0         "OF" Command -Display Offset registers-
  211. SETO     MOVE.B    #'R',D7
  212.          LEA       OFFSET,A3
  213.          BRA.S     PNTCLSB
  214.  SPC 1
  215. PNTCLSD  MOVE.B    #'D',D7  CLASS=DATA
  216.          LEA       REGS,A3  OFFSET
  217.          BRA.S     PNTCLSB
  218.  SPC 1
  219. PNTCLSA  MOVE.B    #'A',D7             CLASS=ADDRESS
  220.          LEA       REGS+32,A3          OFFSET
  221. PNTCLSB  BSR.S     PNTCLS
  222.          BRA       MACSBUG
  223.  SPC 1
  224. PNTCLS   BSR       FIXBUF
  225.          CLR.L     D6        REGISTER COUNTER
  226. PNTCLS1  BSR.S     PNTREG    PRINT THE REGISTER
  227.          CMP.B     #4,D6     DISPLAY AFTER 3&7
  228.          BNE.S     PNTCLS2
  229.          BSR       OUT1CR
  230.          BSR FIXBUF
  231.          BRA PNTCLS1  DO SOME MORE
  232.  SPC 1
  233. PNTCLS2  CMP.B #8,D6    AT END?
  234.          BNE PNTCLS1
  235.          BSR OUT1CR   PRINT IT
  236.          RTS
  237.  SPC 1
  238. *  SUBROUTINE TO PRINT REGISTER  X#=01234567.
  239. PNTREG   MOVE.B D7,(A6)+  CLASS
  240.          MOVE.B D6,D0  REG#
  241.          BSR PUTHEX
  242.          MOVE.B #'=',(A6)+  EQUAL SIGN
  243.          MOVE.L D6,D0     COMPUTE ADDRESS OF REG
  244.          LSL.L #2,D0  MULT BY FOUR
  245.          ADD.L A3,D0   ADD IN OFFSET
  246.          MOVE.L D0,A4   SET UP TO GET DEFFERED
  247.          CMP.L #REGA7,A4  SEE IF REG A7
  248.          BNE.S PNTREG1
  249.          MOVE.L REGSR,D0  GET STATUS REGISTER
  250.          AND.W #$2000,D0  CHECK SUPERVISOR BIT
  251.          BNE.S PNTREG1
  252.          LEA       REGUS,A4  TAKE ADDRESS OF USER STACK
  253. PNTREG1  MOVE.L (A4),D0  GET REG CONTENT
  254.          BSR PNT8HX   PUT IN BUFFER
  255.          MOVE.B #' ',(A6)+   SPACE
  256.          ADD.L #1,D6  BUMP REG#
  257.          RTS
  258.  SPC 1
  259.          END